﻿using System;

namespace SeoulOpenApi.Asset
{
	/// <summary>
	/// 서울시 Open API 서울 문화제 정보
	/// </summary>
	public class AssetsService : BaseService
	{
		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public AssetsService() : this(null, null) { }

		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public AssetsService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}


		/// <summary>
		/// 서비스 항목에 따라 데이터 가져오기
		/// </summary>
		/// <param name="name">서비스명</param>
		/// <returns></returns>
		protected override SoapData getSoapData(string name)
		{
			var soap = new SoapData { Address = new Uri(ApiUrlPrefix + "AssetsService?wsdl", UriKind.Absolute) };
			switch (name)
			{
				case "searchCategoryList":
					soap.Name = "searchCategoryList";
					soap.Description = "문화제 분류 목록 검색";
					soap.SoapBody = "<ns:searchCategoryList xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"</ns:searchCategoryList>";
					break;
				case "searchDetailCategoryList":
					soap.Name = "searchDetailCategoryList";
					soap.Description = "문화제 세부분류 목록 검색";
					soap.SoapBody = "<ns:searchDetailCategoryList xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"<ns:upCode>{0}</ns:upCode>" + // 변수: 상위 분류코드
									"</ns:searchDetailCategoryList>";
					break;
				case "searchCategoryAssetsList":
					soap.Name = "searchCategoryAssetsList";
					soap.Description = "문화재 세부분류코드 및 언어코드 검색";
					soap.SoapBody = "<ns:searchCategoryAssetsList xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"<ns:clssCode2>{0}</ns:clssCode2>" + // 변수: 세부분류코드
									"<ns:lang>{1}</ns:lang>" + // 변수: 언어코드
									"<ns:sortItem>{2}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{3}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{4}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{5}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchCategoryAssetsList>";
					break;
				case "searchNameAssetsList":
					soap.Name = "searchNameAssetsList";
					soap.Description = "문화재 세부분류코드 및 언어코드 검색";
					soap.SoapBody = "<ns:searchNameAssetsList xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"<ns:cultAsstk>{0}</ns:cultAsstk>" + // 변수: 문화재명
									"<ns:lang>{1}</ns:lang>" + // 변수: 언어코드
									"<ns:sortItem>{2}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{3}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{4}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{5}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchNameAssetsList>";
					break;
				case "getAssetsInfo":
					soap.Name = "getAssetsInfo";
					soap.Description = "문화재 상세 정보 제공";
					soap.SoapBody = "<ns:getAssetsInfo xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"<ns:code>{0}</ns:code>" + // 변수: 문화재코드
									"<ns:lang>{1}</ns:lang>" + // 변수: 언어코드
									"</ns:getAssetsInfo>";
					break;
				case "searchFileAssetsList":
					soap.Name = "searchFileAssetsList";
					soap.Description = "문화재 이미지/파일 제공";
					soap.SoapBody = "<ns:searchFileAssetsList xmlns:ns='http://service.assets.culture.openapi.ubizvalley.com'>" +
									"<ns:code>{0}</ns:code>" + // 변수: 문화재코드
									"</ns:searchFileAssetsList>";
					break;
			}

			// 해당 서비스가 없는 경우
			if (String.IsNullOrEmpty(soap.Name))
				throw new Exception(name + " not found.");

			return soap;
		}
	}
}
